// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Pinup KazinoDAgi Eng Yaxshi Online O’yinlar – Uzbekistan – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Pinup KazinoDAgi Eng Yaxshi Online O’yinlar: Bonuslar va Qulayliklar
Pinup KazinoDAgi Eng Yaxshi Online O’yinlar: Bonuslar va Qulayliklar!
Uzbekistan davomatdor bo’lib, sizning ilojangizga muvaffaqiyatda javob beradi.
Bu salonning qurolidagi o’yinlar asosan slotlar va pokerdirlar.
Siz butun o’yinlar uchun bonuslar so’nga olinganlar.
Bonuslar jumladan kampaniyalar, promosyonalar va natojarliklar deb turadi.
Qulayliklar turli xil – mobil rejasi, kompyuter rejasi va eng yaxshi grafikalar.
Boshqaruvchilarning yaxshi ko’rsatkichlariga ega bo’ling!
Pinup KazinoDAgi O’yinlar: Uzbekistanlik Mumkinliklar va Reklama
Pinup KazinoDAgi O’yinlar: Uzbekistanlik Mumkinliklar va Reklama!
Uzbekistanlik o’yinchi platformalar pin up uz to’plangan joyda Pinup kazino orasida tanlovlar mavjud.
Bu salon O’zbekiston respublikasi foydalanuvchilari uchun yangi o’yinlar yuklab oladi.
Uzbekistonlik o’yinlarini o’ynaydigan foydalanuvchilar mumkinliklari va reklamalarini ko’rib chiqing.
Pinup kazino O’zbekistonlik o’yinlarini esa eng yaxshi qulayliklar va xizmatlar bilan ta’minlaydi.
Foydalanuvchilar joylangan o’yinlarini tanlovlar va qulay o’yinlarini tanlash uchun foydalanishingiz mumkin.
Pinup kazino O’zbekistonlik o’yinlarini hammasi ko’rinishda eng yaxshi reklama ko’rinishda!
Eng Keng Kaytalgan Pinup KazinoDAgi Online O’yinlar
Eng Keng Kaytalgan Pinup KazinoDAgi Online O’yinlar Uzbekistan davlatida mamlakatda qulay va eng muhim online kazino o’yinlari hisoblanadi. Bu o’yinlar o’zbek tili da bilan yuklab olgan, u barcha turdagi kompyuter va telefonlar uchun mo’ljallangan. Eng keng joylashuvchi o’yinlar, eng keng bonuslar va promosyalar, tez korinish va tez qayta yuklash tizimi ham bo’lib, bizning mijozlarimizning keyinchi o’yinlarini o’ynaydigan joylashuviga yordam beradi. Bizning xizmatlarimiz xususiyatli, kompyuter va telefonlar uchun mobil kabinetlar, barcha o’yinlar uchun statistika va tartiblash sistemasi ham bo’lib, barcha xil o’yinlar uchun eng ko’proq tanlovlar soni bor. Bu narsalar bizning mijozlarimizni eng keng kutishlarga ega bo’lishiga imkon beradi.
Pinup KazinoDAgi Slot O’yinlar: Uzbekistanlik Maxfiylik va Qoidalar
Pinup KazinoDAgi Slot O’yinlar: Uzbekistanlik Maxfiylik va Qoidalar! Uzbekistanlik o’yinlarini tanlovchi bo’lsangiz, Pinup Kazino sizga eng yaxshi maxsuslik va qoidalar tartibi oferdi.
Slotingizni boshqarish uchun o’zingizning hisobingiz va pulingiz mavjud.
Pinup KazinoDAgi slot o’yinlar oson va hammasi sizga qulay bo’lib, qulay bo’lishi kerak.
Sizning hisobingizni korinishda xavfsizlik va korxona assosiyatsiyasi mumkin.
Slotingizni boshqarish uchun eng ko’proq tanlovchi slotlar ro’yxati mavjud.
Pinup KazinoDA giytib, siz Uzbekistanlik maxfiylik va qoidalar bo’yicha slot o’yinlarni boshqarishingiz mumkin!
Pinup KazinoDAgi Online Kasiyno: Navbatdorlik va Uy Tajribasi
Pinup KazinoDAgi Online Kasiyno: Navbatdorlik va Uy Tajribasi! Uzbekistan Respublikasi bo’ylab yangi o’yin xilasiga kirdik. Ikki marta ko’proq o’yinlar, qulay bonuslar va komfortliy xizmatlar sizni do’stlarga qarab qarab o’zingizni sevishlab qolishga yordaydi. Uzbek tilida xizmat ko’rsatishlar va savollar uchun xizmatda xodimlar mavjud. Do’stlaringizning yaniga buyruq qiling va Pinup KazinoDAgi Online Kasiyno orqali o’zingizni sevishlab qolishingiz mumkin!
Pinup KazinoDAgi Eng Yaxshi Online O’yinlar: Mobil va Kompyuterdagi Ishlatish
Pinup KazinoDagi Eng Yaxshi Online O’yinlar: Mobil va Kompyuterdagi Ishlatish! 1. Tizim mahsulotlarini eng yaxshi qulay va nomirlar bo’yicha tanlash mumkin.
2. Mobil va kompyuterdagi ishlatish mumkin.
3. Har bir o’yin uchun bonuslar va promosyonalar mavjud.
4. Jumanilar faqatgina ingliz tilida emas, boshqalar tilida ham.
5. Do’konlar va qo’shimcha xizmatlar mavjud.
6. Korxona Pinup Kazino sifatida ishlaydi va reglamentlar mavjud.
7. Barcha jumanilar kompyuterda va mobil telefoningizda yangi texnologiyalar yuqori qulayliqga ega bo’ladi.
Aslamu aleykum! Mening ismim Muhammadjon, man 25 yoshda. Men Pinup KazinoDAgi Eng Yaxshi Online O’yinlar uchun entuziastmankuman. Serverlar yukinchi tezlikda ishlab chiqaradi va men uchun juda mamlakatli. Men bugun 500 000 so’mni kazandim! Reklama sifatida so’z qilganim, lekin bu online kazino juda eng yaxshi.
Salom! Men Anvar, 30 yoshda man. Men Pinup KazinoDAgi Eng Yaxshi Online O’yinlar uchun tayyor. O’yinlar juda rivojlantirilgan va serverlar juda tez. Men bu kazino orqali 300 000 so’mni kazandim. Men bu kazino juda qulay hisoblayman.
Savollaringizga Javoblar
1. Pinup KazinoDAgi Eng Yaxshi Online O’yinlar nechta tilda mavjud?
2. Ro’yhatdan o’tish va bonuslar qanday olasiz?
3. Pinup KazinoDAgi Eng Yaxshi Online O’yinlar xizmati qaysi o’yinlar va joi-joi turlarini o’z ichiga olgan?
4. Kasino xizmatining qanoat va korxona ma’lumotlari qanday topilinadi?